package com.ztrue.framework.handler;

import java.util.Arrays;
import java.util.Collection;

/**
 * 表示不是唯一的处理器定义
 *
 * @author zhangw
 * @date 2016/11/15 17:04
 */
public class NoUniqueHandlerDefinitionException extends NoSuchHandlerDefinitionException {
    private int numberOfHandlerFound;

    /**
     * 初始化一个不是唯一的处理器定义的异常
     *
     * @param type               处理器类型
     * @param numberOfBeansFound 发现的数量
     * @param message            异常消息信息
     */
    public NoUniqueHandlerDefinitionException(Class<?> type, int numberOfBeansFound, String message) {
        super(type, message);
        this.numberOfHandlerFound = numberOfBeansFound;
    }

    /**
     * 初始化一个不是唯一的处理器定义的异常
     *
     * @param type           处理器类型
     * @param beanNamesFound 发现的处理器
     */
    public NoUniqueHandlerDefinitionException(Class<?> type, Collection<String> beanNamesFound) {
        this(type, beanNamesFound.size(), String.format("发现类型[%s]的处理器共有 %s 个，无法确定需求", type.toString(), beanNamesFound.size()));
    }

    /**
     * 初始化一个不是唯一的处理器定义的异常
     *
     * @param type           处理器类型
     * @param beanNamesFound 发现的处理器
     */
    public NoUniqueHandlerDefinitionException(Class<?> type, String... beanNamesFound) {
        this(type, Arrays.asList(beanNamesFound));
    }

    /**
     * 获取查找到的处理器数量
     *
     * @return
     */
    @Override
    public int getNumberOfHandlerFound() {
        return this.numberOfHandlerFound;
    }
}
